/**
 * 取消easyui默认开启的parser
 * 在页面加载之前，先开启一个进度条
 * 然后在页面所有easyui组件渲染完毕后，关闭进度条
 */
$.parser.auto = false;
$(function() {
	$.messager.progress({
		text : '页面加载中....',
		interval : 100
	});
	$.parser.parse(window.document);
	window.setTimeout(function() {
		$.messager.progress('close');
		if (self != parent) {
			window.setTimeout(function() {
				try {
					parent.$.messager.progress('close');
				} catch (e) {
				}
			}, 500);
		}
	}, 1);
	$.parser.auto = true;
});

/**
 * 使panel和datagrid在加载时提示
 */
$.fn.panel.defaults.loadingMessage = '加载中....';
$.fn.datagrid.defaults.loadMsg = '加载中....';

/**
 * 避免验证tip屏幕跑偏
 */
var removeEasyuiTipFunction = function() {
	window.setTimeout(function() {
		$('div.validatebox-tip').remove();
	}, 0);
};
$.fn.panel.defaults.onClose = removeEasyuiTipFunction;
$.fn.window.defaults.onClose = removeEasyuiTipFunction;
$.fn.dialog.defaults.onClose = removeEasyuiTipFunction;

/**
 * 通用错误提示
 * 用于datagrid/treegrid/tree/combogrid/combobox/form加载数据出错时的操作
 */
var easyuiErrorFunction = function(XMLHttpRequest) {
	$.messager.progress('close');
	$.messager.alert('错误', XMLHttpRequest.responseText);
};
$.fn.datagrid.defaults.onLoadError = easyuiErrorFunction;
$.fn.treegrid.defaults.onLoadError = easyuiErrorFunction;
$.fn.tree.defaults.onLoadError = easyuiErrorFunction;
$.fn.combogrid.defaults.onLoadError = easyuiErrorFunction;
$.fn.combobox.defaults.onLoadError = easyuiErrorFunction;
$.fn.form.defaults.onLoadError = easyuiErrorFunction;

/**
 * 为datagrid、treegrid增加表头菜单，用于显示或隐藏列，注意：冻结列不在此菜单中
 */
var createGridHeaderContextMenu = function(e, field) {
	e.preventDefault();
	var grid = $(this);/* grid本身 */
	var headerContextMenu = this.headerContextMenu;/* grid上的列头菜单对象 */
	if (!headerContextMenu) {
		var tmenu = $('<div style="width:100px;"></div>').appendTo('body');
		var fields = grid.datagrid('getColumnFields');
		for ( var i = 0; i < fields.length; i++) {
			var fildOption = grid.datagrid('getColumnOption', fields[i]);
			if (!fildOption.hidden) {
				$('<div iconCls="icon-ok" field="' + fields[i] + '"/>').html(fildOption.title).appendTo(tmenu);
			} else {
				$('<div iconCls="icon-empty" field="' + fields[i] + '"/>').html(fildOption.title).appendTo(tmenu);
			}
		}
		headerContextMenu = this.headerContextMenu = tmenu.menu({
			onClick : function(item) {
				var field = $(item.target).attr('field');
				if (item.iconCls == 'icon-ok') {
					grid.datagrid('hideColumn', field);
					$(this).menu('setIcon', {
						target : item.target,
						iconCls : 'icon-empty'
					});
				} else {
					grid.datagrid('showColumn', field);
					$(this).menu('setIcon', {
						target : item.target,
						iconCls : 'icon-ok'
					});
				}
			}
		});
	}
	headerContextMenu.menu('show', {
		left : e.pageX,
		top : e.pageY
	});
};
$.fn.datagrid.defaults.onHeaderContextMenu = createGridHeaderContextMenu;
$.fn.treegrid.defaults.onHeaderContextMenu = createGridHeaderContextMenu;


/**
 * 防止panel/window/dialog组件超出浏览器边界
 * @param left
 * @param top
 */
var easyuiPanelOnMove = function(left, top) {
	var l = left;
	var t = top;
	if (l < 1) {
		l = 1;
	}
	if (t < 1) {
		t = 1;
	}
	var width = parseInt($(this).parent().css('width')) + 14;
	var height = parseInt($(this).parent().css('height')) + 14;
	var right = l + width;
	var buttom = t + height;
	var browserWidth = $(window).width();
	var browserHeight = $(window).height();
	if (right > browserWidth) {
		l = browserWidth - width;
	}
	if (buttom > browserHeight) {
		t = browserHeight - height;
	}
	$(this).parent().css({/* 修正面板位置 */
		left : l,
		top : t
	});
};
$.fn.dialog.defaults.onMove = easyuiPanelOnMove;
$.fn.window.defaults.onMove = easyuiPanelOnMove;
$.fn.panel.defaults.onMove = easyuiPanelOnMove;

/**
 * panel关闭时回收内存
 */
$.fn.panel.defaults.onBeforeDestroy = function() {
	var frame = $('iframe', this);
	try {
		if (frame.length > 0) {
			for ( var i = 0; i < frame.length; i++) {
				frame[i].contentWindow.document.write('');
				frame[i].contentWindow.close();
			}
			frame.remove();
			if ($.browser.msie) {
				CollectGarbage();
			}
		}
	} catch (e) {
	}
};

/**
 * 扩展easyui表单的验证（validatebox）
 */
$.extend($.fn.validatebox.defaults.rules, {
	equalTo: {
        validator: function (value, param) {
            return $.trim(value) == $.trim($("#"+param[0]).val());
        },
        message: '两次输入的字符不一至'
    },
    //用户账号验证(只能包括 _ 数字 字母) 
    account: {//param的值为[]中值
        validator: function (value, param) {
    		if(param != null){
    			if (value.length < param[0] || value.length > param[1]) {
	                $.fn.validatebox.defaults.rules.account.message = '用户名长度必须在' + param[0] + '至' + param[1] + '范围';
	                return false;
	            }
    		}
            if (!/^[\w]+$/.test(value)) {
                $.fn.validatebox.defaults.rules.account.message = '用户名只能数字、字母、下划线组成.';
                return false;
            } else {
                return true;
            }
            
        }, message: ''
    }
});

var lc = $.extend({}, lc);
lc = (function($){
	return {
		/**
		 * 增加命名空间功能
		 * 
		 * 使用方法：lc.ns('jQuery.bbb.ccc','jQuery.eee.fff');
		 */
		ns : function() {
			var o = {}, d;
			for ( var i = 0; i < arguments.length; i++) {
				d = arguments[i].split(".");
				o = window[d[0]] = window[d[0]] || {};
				for ( var k = 0; k < d.slice(1).length; k++) {
					o = o[d[k + 1]] = o[d[k + 1]] || {};
				}
			}
			return o;
		},
	
		submit : function(fmid){
			var f = $("form[id='" + fmid + "']");
			f.submit();
		},
		
		reset : function(fmid){
			var f = $("form[id='" + fmid + "']");
			f.reset();
		},
	
		selectItemByKey : function (objSelect, objItemKey) {
			for ( var i = 0; i < objSelect.options.length; i++) {
				if (objSelect.options[i].value == objItemKey) {
					objSelect.options[i].selected = true;
					break;
				}
			}
		},
		selectItemByVal : function (objSelect, objItemText) {
			for ( var i = 0; i < objSelect.options.length; i++) {
				if (objSelect.options[i].text == objItemText) {
					objSelect.options[i].selected = true;
					break;
				}
			}
		},
	
		setIframe : function(iframeID, url) {
			$('#'+iframeID).attr('src', url);
		},
		
		/**
		 * 更新标签
		 */
		updateTab : function(tabID, title, iframeID, url){
			var tab = $('#'+tabID).tabs('getSelected');
			$('#'+tabID).tabs('update', {
				tab : tab,
				options : tab.panel('options')
			});
			set_iframe(iframeID, url);
		},
		
		/**
		 * 关闭所有Tab
		 */
		closeAllTabs : function (tabID){
			var tabs = $('#'+tabID).tabs("tabs");
			var length = tabs.length;
			for(var i = 0; i < length; i++){
				$('#'+tabID).tabs("close", 0);//easyui 1.2.5
			}
		},
		
		refreshTab : function (tabID, title){
			var tab = $('#'+tabID).tabs('getTab', title);
			$('#'+tabID).tabs('update', {
				tab : tab,
				options : tab.panel('options')
			});
		},
		
		/**
		 * 添加一个新标签（iframe方式）
		 * @param {string} tabID 标签组的ID
		 * @param {string} title 新标签的名字
		 * @param {string} url 新标签内容的url
		 */
		addTab : function (tabID, title, url){
			//判断该名字的标签是否已经存在
			var tab = $('#'+tabID).tabs('exists', title);
			if (tab) {
				//若存在，则直接打开
				$('#'+tabID).tabs('select', title);
			} else {
				//若不存在，则创建该标签，并添加onSelect事件实现单击标签时刷新内容
				
				$.messager.progress({
					text : '页面加载中....',
					interval : 100
				});
				window.setTimeout(function() {
					try {
						$.messager.progress('close');
					} catch (e) {
					}
				}, 5000);
					
				var content = "页面未实现";
				if($.trim(url) != "")
					content = "<iframe src='" + url + "' width='100%' height='99.4%' frameborder='0' scrolling='auto'></iframe>";
				$('#'+tabID).tabs('add',{
					fit : true,
					border : false,
					title : title,
					closable : true,
					content : content,
					tools : [ {
						iconCls : 'icon-mini-refresh',
						handler : function() {
							refreshTab(tabID, title);
						}
					} ]
				})/*.tabs({
					onSelect : function(title){
						refreshTab(tabID, title);
					}
				})*/;
			}
		},
		/**
		 * 添加一个新标签（href方式）
		 */
		add_tab : function (tabID, title, url){
			var tab = $('#'+tabID).tabs('exists', title);
			if (tab) {
				$('#'+tabID).tabs('select', title);
			} else {
				$('#'+tabID).tabs('add',{
					title : title,
					href : url
				});
			}
		},
		
		/**
		 * 添加一个带关闭按钮的可刷新的新标签（href方式）
		 */
		add_ctab : function (tabID, title, url){
			var tab = $('#'+tabID).tabs('exists', title);
			if (tab) {
				$('#'+tabID).tabs('select', title);
			} else {
				$('#'+tabID).tabs('add',{
					title : title,
					href : url,
					cache : false,
					closable:true
				});
			}
		},
		
		selectTab : function (tabID, which){
			var tab = $('#'+tabID).tabs('exists', which);
			if(tab)
				$('#'+tabID).tabs('select', which);
		},
		
		closeDialog : function (dialogId) {
			$('#' + dialogId).dialog('close');
		},
		
		dialog : function(options){
			var opts = $.extend({
				modal : true,
				onClose : function() {
					$(this).dialog('destroy');
				}
			}, options);
			return $('<div/>').dialog(opts);
		},
		
		reloadDatagrid : function (dataTableId) {
			$('#' + dataTableId).datagrid('reload');
		},
		
		/*
		reload_tree : function (treeID){
			$('#' + treeID).tree('reload');
		},
		
		reload_zTree : function (treeID){
			var treeObj = $.fn.zTree.getZTreeObj(treeID);
			
			var nodes = treeObj.getSelectedNodes();
			if (nodes.length>0) {
				LC.$curr_node = nodes[0];
			}
			
			treeObj.reAsyncChildNodes(null, "refresh");
		},
		
		//展开当前选择的第一个节点（不包括其全部子节点）
		expand_zTree_Node : function(treeID){
			var treeObj = $.fn.zTree.getZTreeObj(treeID);
			var nodes = treeObj.getSelectedNodes();
			if (nodes.length>0) {
				treeObj.expandNode(nodes[0], true, false, true);
			}
		},
		*/
		
		/**
		 * 清除DataGrid所有选择
		 * @param {Object} tblID datagrid的id
		 */
		clearDatagridSelect : function (tblID) {
			$('#' + tblID).datagrid('clearSelections');
			//取消选择DataGrid中的全选
			$("input[type='checkbox']").eq(0).attr("checked", false);
		},
		
		getSelectRow : function (dataTableId, errorMessage) {
			var rows = $('#' + dataTableId).datagrid('getSelections');
			var num = rows.length;
			if (num == 1) {
				return rows[0];
			} else {
				$.messager.alert('提示消息', errorMessage, 'info');
				return null;
			}
		},
		
		getSelectIds : function (dataTableId, errorMsg) {
			var rows = $('#' + dataTableId).datagrid('getSelections');
			var num = rows.length;
			var ids = [];
			if(num < 1){
				if (null != errorMsg)
					$.messager.alert('提示消息',errorMsg,'info');
				return null;
			}else{
				for(var i = 0; i < num; i++){
					ids.push(rows[i].id);
				}
				return ids.join(',');
			}
		},
		delOper : function (dgID, info, reqUrl){
			var rows = $('#' + dgID).datagrid('getSelections');  
			if(rows.length==0){
				$.messager.alert('提示','请选择你要删除的' + info,'info');
				return;
			}
		    var ids = [];  
			for(var i=0; i<rows.length; i++){  
			    ids.push(rows[i].id);  
			} 
		    if (rows.length > 0){  
		        $.messager.confirm('确认','确定删除选中的' + info,function(r){  
		            if (r){  
		                $.post(reqUrl,{idArr:ids.join(',')},function(result){  
		                    if (result.msg == 'success'){  
		                        lc.reloadDatagrid(dgID);
		                    } else {  
		                        $.messager.alert('错误',result.msg,'error');
		                    }  
		                },'json');  
		            }  
		        });  
		    }  
		},
		/*del_with_tree_oper : function (dgID, treeID, info, reqUrl){
			var rows = $('#' + dgID).datagrid('getSelections');  
			if(rows.length==0){
				$.messager.alert('提示','请选择你要删除的' + info,'info');
				return;
			}
		    var ids = [];  
			for(var i=0; i<rows.length; i++){  
			    ids.push(rows[i].id);  
			} 
		    if (rows.length > 0){  
		        $.messager.confirm('确认','确定删除选中的' + info,function(r){  
		            if (r){  
		                $.post(reqUrl,{idArr:ids.join(',')},function(result){  
		                    if (result.msg == 'success'){  
		                        LC.reloadDatagrid(dgID);
		                        LC.reload_zTree(treeID);
		                    } else {  
		                        $.messager.alert('错误',result.msg,'error');
		                    }  
		                },'json');  
		            }  
		        });  
		    }  
		},
		*/
		saveOper : function (formID, dlgID, dataTableID, url) {
			$('#' + formID).form('submit', {
				url: url,
				onSubmit : function() {
					return $(this).form('validate');
				},
				success : function(result) {
					var result = eval('(' + result + ')');
					if (result.msg == 'success') {
						lc.closeDialog(dlgID);
						lc.reloadDatagrid(dataTableID);
					} else {
						$.messager.alert('错误', result.msg, 'error');
					}
				}
			});
		},
		/*
		save_with_tree_oper : function (formID, dlgID, treeID,dataTableID, url) {
			$('#' + formID).form('submit', {
				url: url,
				onSubmit : function() {
					return $(this).form('validate');
				},
				success : function(result) {
					var result = eval('(' + result + ')');
					if (result.msg == 'success') {
						LC.closeDialog(dlgID);
						LC.reloadDatagrid(dataTableID);
						//LC.reload_zTree(treeID);
					} else {
						$.messager.alert('错误', result.msg, 'error');
					}
				}
			});
		},
		*/
		//表格查询
		searchDatagrid : function (dataTblID, formID) {
			//设置分页控件  
		    //var p = $('#' + dataTblID).datagrid('getPager');  
		    //$(p).pagination({pageNumber : 1}); 
		
			var params = $('#' + dataTblID).datagrid('options').queryParams; 
			var fields = $('#' + formID).serializeArray();
			$.each(fields, function(i, field) {
				params[field.name] = field.value;
			});
			lc.reloadDatagrid(dataTblID);
		},
		
		//设定 datagrid，点击行不自动选中checkbox
		bindRowsEvent : function (dataTableId) {
			var panel = $('#' + dataTableId).datagrid('getPanel');
			var rows = panel.find('tr[datagrid-row-index]');
			rows.unbind('click').bind('click', function(e) {
				return false;
			});
		},
	
		createWin : function (config){
			$.createWin(config);
		},
		closeWin : function (winID){
			$(GETWIN(winID)).destroy();
		}
	};
})(jQuery);

